import { NextRequest, NextResponse } from "next/server"; import { z } from "zod"; import { and, eq } from "drizzle-orm"; import { db } from "@/db/client"; import { savedSearches } from "@/db/schema"; import { assertSameOrigin, requireUser } from "@/lib/auth/session"; import { handle, parseBody } from "@/lib/api"; export const dynamic = "force-dynamic"; type P = { params: Promise<{ id: string }> }; const Patch = z.object({ label: z.string().trim().min(1).max(120).optional(), alertEnabled: z.boolean().optional(), alertFrequency: z.enum(["INSTANT", "DAILY", "WEEKLY", "OFF"]).optional() }); export async function PATCH(req: NextRequest, { params }: P) { try { await assertSameOrigin(); const u = await requireUser(); const { id } = await params; const b = await parseBody(req, Patch); await db().update(savedSearches).set(b).where(and(eq(savedSearches.id, id), eq(savedSearches.userId, u.id))); return NextResponse.json({ ok: true }); } catch (e) { return handle(e); } } export async function DELETE(_req: NextRequest, { params }: P) { try { await assertSameOrigin(); const u = await requireUser(); const { id } = await params; await db().delete(savedSearches).where(and(eq(savedSearches.id, id), eq(savedSearches.userId, u.id))); return NextResponse.json({ ok: true }); } catch (e) { return handle(e); } }